const api = require('../../utils/api');

// 示例数据，用于ID无效时显示
const exampleKnowledge = {
  _id: "sample123",
  title: "健康知识示例",
  content: "这是一个示例健康知识内容。当无法从服务器获取数据时，会显示此内容。实际使用时，请确保传递有效的MongoDB ObjectId。",
  summary: "示例摘要",
  category: "健康生活",
  tags: ["示例", "健康"],
  viewCount: 100,
  likeCount: 50,
  author: "健康管理团队",
  source: "本地示例",
  publishDate: new Date().toISOString()
};

Page({
  data: {
    id: '',
    knowledge: null,
    loading: true,
    likeCount: 0,
    hasLiked: false
  },

  onLoad: function (options) {
    if (options.id) {
      this.setData({
        id: options.id
      });
      this.loadKnowledgeDetail();
    } else {
      wx.showToast({
        title: '参数错误',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  // 加载健康知识详情
  loadKnowledgeDetail: function () {
    const { id } = this.data;
    
    this.setData({ loading: true });
    
    // 如果是测试ID且不是开发环境，使用示例数据
    if ((id === '1' || id === '2' || id === '3' || !this.isValidObjectId(id))) {
      console.log('使用示例数据代替实际API请求');
      
      // 尝试测试数据库连接
      api.testDatabaseConnection && api.testDatabaseConnection()
        .then(res => {
          console.log('数据库连接测试结果:', res);
          if (!res || !res.success) {
            wx.showToast({
              title: '数据库连接失败',
              icon: 'none'
            });
          }
        })
        .catch(err => {
          console.error('数据库连接测试失败:', err);
        });
      
      // 延迟一点显示示例数据，模拟网络请求
      setTimeout(() => {
        this.setData({
          knowledge: {...exampleKnowledge, _id: id, title: `健康知识示例 ${id}`},
          likeCount: exampleKnowledge.likeCount,
          loading: false
        });
        
        wx.setNavigationBarTitle({
          title: `健康知识示例 ${id}`
        });
        
        // 显示使用示例数据的原因
        wx.showToast({
          title: 'ID格式不是MongoDB格式',
          icon: 'none',
          duration: 2000
        });
      }, 500);
      
      return;
    }
    
    // 正常API请求
    api.healthKnowledge.getKnowledgeById(id)
      .then(res => {
        // 直接使用内容，不使用wxParse
        this.setData({
          knowledge: res,
          likeCount: res.likeCount || 0,
          loading: false
        });
        
        // 设置页面标题
        if (res.title) {
          wx.setNavigationBarTitle({
            title: res.title
          });
        }
      })
      .catch(err => {
        console.error('加载健康知识详情失败:', err);
        
        // 加载失败时使用示例数据
        this.setData({
          knowledge: {...exampleKnowledge, _id: id, title: `健康知识 ${id}`},
          likeCount: exampleKnowledge.likeCount,
          loading: false
        });
        
        wx.setNavigationBarTitle({
          title: `健康知识 ${id}`
        });
        
        wx.showToast({
          title: '数据库读取失败，使用示例数据',
          icon: 'none'
        });
      });
  },

  // 检查是否是有效的MongoDB ObjectId
  isValidObjectId: function(id) {
    return id && /^[0-9a-fA-F]{24}$/.test(id);
  },

  // 点赞
  onLike: function () {
    if (this.data.hasLiked) {
      return;
    }
    
    const { id } = this.data;
    
    // 如果是示例数据，直接模拟点赞成功
    if (!this.isValidObjectId(id)) {
      this.setData({
        likeCount: this.data.likeCount + 1,
        hasLiked: true
      });
      
      wx.showToast({
        title: '点赞成功',
        icon: 'success'
      });
      return;
    }
    
    api.healthKnowledge.likeKnowledge(id)
      .then(res => {
        this.setData({
          likeCount: res.likeCount,
          hasLiked: true
        });
        
        wx.showToast({
          title: '点赞成功',
          icon: 'success'
        });
      })
      .catch(err => {
        console.error('点赞失败:', err);
        wx.showToast({
          title: '点赞失败，请重试',
          icon: 'none'
        });
      });
  },

  // 分享
  onShareAppMessage: function () {
    const { knowledge } = this.data;
    return {
      title: knowledge ? knowledge.title : '健康知识 - 糖尿病管理助手',
      path: `/pages/healthKnowledgeDetail/healthKnowledgeDetail?id=${this.data.id}`
    };
  },

  // 回到顶部
  scrollToTop: function () {
    wx.pageScrollTo({
      scrollTop: 0,
      duration: 300
    });
  }
}); 